import { mapState, mapActions } from 'vuex'
import { makeUUID } from '@/utils'

export default {
  computed: {
    ...mapState('editor/diagram', {
      _linkDataStamp: 'linkDataStamp',
      _linkDataResults: 'linkDataResults'
    })
  },
  watch: {
    _linkDataStamp: {
      handler(newVal, oldVal) {
        console.log('watch --> link data 时间戳改变:', oldVal, ' --> ', newVal)
        if (newVal !== '') {
          // 根据命令运行结果更新组件数据
          this.onGetLinkDatas(this._linkDataResults)
        }
      },
      // https://www.cnblogs.com/shiningly/p/9471067.html
      // 第一次绑定的时候，不会执行监听函数，只有值发生改变才会执行。
      // 如果我们需要在最初绑定值的时候也执行函数，则就需要用到immediate属性
      immediate: false
    }
  },
  methods: {
    ...mapActions('editor/diagram', {
      _getLinkDatas: 'getLinkDatas'
    }),
    // 获取所有分支指定字段的数据
    getLinkDatas(fields) {
      // 调用后触发onSelectionChange回调
      this._getLinkDatas({ stamp: makeUUID(), fields })
    },

    // 提示: 各组件应根据需要重新定义该函数
    // 根据vue mixin语法规则:组件的method会覆盖mixin的method
    onGetLinkDatas(datas) {}
  }
}
